/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.resume.sinistre.builder;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import fr.generali.accueilclient.resume.contrat.om.IRole;
import fr.generali.accueilclient.resume.contrat.om.impl.Role;
import fr.generali.accueilclient.resume.sinistre.om.IResumeSinistre;
import fr.generali.accueilclient.resume.sinistre.om.impl.ResumeSinistre;
import fr.generali.refservcommuns.rce.liste.sinistres.dto.cla.DTOSinistre;
import fr.generali.refservcommuns.clients.resume.dto.v4.pty.personnes.DTOPersonneResume;

/**
 * @author Holmes Kelly
 */
public class DtoSinistre2ResumeSinistreBuilder implements IResumeSinistreBuilder {

    /**
     * IResumeSinistre
     */
    private IResumeSinistre sinistre;

    /**
     * DTOSinistre
     */
    private DTOSinistre input;

    /**
     * @param input input
     */
    public DtoSinistre2ResumeSinistreBuilder(DTOSinistre input) {
        this.sinistre = new ResumeSinistre();
        this.input = input;
    }

    /**
     * {@inheritDoc}
     */
    public void buildBilanNature() {
        sinistre.setBilanNature(input.getCodeBilanSinistre());
    }

    /**
     * {@inheritDoc}
     */
    public void buildCodeNature() {
        sinistre.setCodeNature(input.getCodeNatureSinistre());

    }

    /**
     * {@inheritDoc}
     */
    public void buildCodeProduitContrat() {
        if (input.getContrat() != null) {
            sinistre.setCodeProduitContrat(input.getContrat().getCodeProduit());
        }
    }

    /**
     * {@inheritDoc}
     */
    public void buildCodeSocieteContrat() {
        if (input.getContrat() != null) {
            sinistre.setCodeSocieteContrat(input.getContrat().getSocieteDuGroupe());
        }
    }

    /**
     * {@inheritDoc}
     */
    public void buildDateCloture() {
        if (input.getDateCloture() != null) {
            sinistre.setDateCloture(input.getDateCloture().toGregorianCalendar().getTime());
        }
    }

    /**
     * {@inheritDoc}
     */
    public void buildDateCompetence() {
        if (input.getDateCompetence() != null) {
            sinistre.setDateCompetence(input.getDateCompetence().toGregorianCalendar().getTime());
        }
    }

    /**
     * {@inheritDoc}
     */
    public void buildDateDROC() {
        if (input.getDateDROC() != null) {
            sinistre.setDateDROC(input.getDateDROC().toGregorianCalendar().getTime());
        }
    }

    /**
     * {@inheritDoc}
     */
    public void buildDateDeclaration() {
        if (input.getDateDeSaisie() != null) {
            sinistre.setDateDeclaration(input.getDateDeSaisie().toGregorianCalendar().getTime());
        }
    }

    /**
     * {@inheritDoc}
     */
    public void buildDateSurvenance() {
        if (input.getDateSurvenance() != null) {
            sinistre.setDateSurvenance(input.getDateSurvenance().toGregorianCalendar().getTime());
        }
    }

    /**
     * {@inheritDoc}
     */
    public void buildIndicateurSinistreGrave() {
        sinistre.setIndicateurSinistreGrave(input.getCodeGravite());
    }

    /**
     * {@inheritDoc}
     */
    public void buildMontantTotal() {
        sinistre.setMontantTotal(input.getEvaluationInitiale() == null
                        || input.getEvaluationInitiale().getValue() == null ? null : input.getEvaluationInitiale()
                        .getValue().setScale(2, BigDecimal.ROUND_DOWN));
    }

    /**
     * {@inheritDoc}
     */
    public void buildMontantTotalDevise() {
        sinistre.setMontantTotalDevise(input.getEvaluationInitiale().getUnit());
    }

    /**
     * {@inheritDoc}
     */
    public void buildNbRecoursAboutis() {
        sinistre.setNbRecoursAboutis(input.getRecoursAboutis());
    }

    /**
     * {@inheritDoc}
     */
    public void buildNbRecoursExerces() {
        sinistre.setNbRecoursExerces(input.getRecoursEmis());
    }

    /**
     * {@inheritDoc}
     */
    public void buildNbRecoursSubis() {
        sinistre.setNbRecoursSubis(input.getRecoursSubis());
    }

    /**
     * {@inheritDoc}
     */
    public void buildNumeroContrat() {
        sinistre.setNumeroContrat(input.getContrat().getIdentifiant());
    }

    /**
     * {@inheritDoc}
     */
    public void buildNumeroImmatriculationVehicule() {
        sinistre.setNumeroImmatriculationVehicule(input.getNumeroImmatriculation());
    }

    /**
     * {@inheritDoc}
     */
    public void buildNumeroSinistreCie() {
        sinistre.setNumeroSinistreCie(input.getIdentifiant());
    }

    /**
     * {@inheritDoc}
     */
    public void buildReglementAssure() {
        sinistre.setReglementAssure(input.getCumulReglementsAssure() == null
                        || input.getCumulReglementsAssure().getValue() == null ? null : input
                        .getCumulReglementsAssure().getValue().setScale(2, BigDecimal.ROUND_DOWN));
    }

    /**
     * {@inheritDoc}
     */
    public void buildReglementAssureDevise() {
        sinistre.setReglementAssureDevise(input.getCumulReglementsAssure().getUnit());
    }

    /**
     * {@inheritDoc}
     */
    public void buildResponsabiliteSinistre() {
        sinistre.setResponsabiliteSinistre(input.getCodeResponsabiliteAssureDroitCommun());
    }

    /**
     * {@inheritDoc}
     */
    public void buildRoles() {
        List<DTOPersonneResume> listeRolePersonne = input.getContrat().getRolePersonne();

        if (listeRolePersonne != null && !listeRolePersonne.isEmpty()) {
            List<IRole> listeRole = new ArrayList<IRole>();
            for (DTOPersonneResume personneResume : listeRolePersonne) {
                IRole role = new Role();
                role.setRole(personneResume.getRole());
                role.setNumeroClient(personneResume.getIdentifiantRCE());

                if (personneResume.getDTOPersonnePhysique() != null) {
                    role.setNom(personneResume.getDTOPersonnePhysique().getNom());
                    role.setPrenom(personneResume.getDTOPersonnePhysique().getPrenom());
                } else if (personneResume.getDTOPersonneMorale() != null) {
                    role.setNom(personneResume.getDTOPersonneMorale().getRaisonSociale());
                    role.setPrenom(null);
                }

                listeRole.add(role);
            }

            sinistre.setRoles(listeRole);
        }
    }

    /**
     * {@inheritDoc}
     */
    public void buildStatut() {
        sinistre.setStatut(input.getCodeStatutSinistre());
    }

    /**
     * {@inheritDoc}
     */
    public void buildSystemeOrigineSinistre() {
        sinistre.setSystemeOrigineSinistre(input.getSystemeOrigine());
    }

    /**
     * {@inheritDoc}
     */
    public void buildSystemeOrigineContrat() {
        sinistre.setSystemeOrigineContrat(input.getContrat().getSystemeOrigine());

    }

    /**
     * {@inheritDoc}
     */
    public void buildTypeRecours() {
        sinistre.setTypeRecours(input.getCodeTypeRecours());
    }

    /**
     * {@inheritDoc}
     */
    public void buildTypeSiteGestion() {
        sinistre.setTypeSiteGestion(input.getCodeTypeSiteGestion());
    }

    /**
     * {@inheritDoc}
     */
    public void buildNumeroSinistreAgent() {
        sinistre.setNumeroSinistreAgent(input.getNumeroDossierSinistreAC());
    }

    /**
     * {@inheritDoc}
     */
    public void buildMontantTotalDesReglements() {
        sinistre.setMontantTotalDesReglements(input.getMontantTotalDesReglements() == null
                        || input.getMontantTotalDesReglements().getValue() == null ? null : input
                        .getMontantTotalDesReglements().getValue().setScale(2, BigDecimal.ROUND_DOWN));
    }

    /**
     * {@inheritDoc}
     */
    public IResumeSinistre getResumeSinistre() {

        return sinistre;
    }

}
